/************************************************************************************
**@文件名：LedDisplay.c

**@文件说明：对数码管相关函数进行封装

**@作者：XiaoYoung

**@日期：2020/11/2
***********************************************************************************/
#include "LedDisplay.h"
#include "crc.h"
#include "e2prom.h"
#include "lcm08f16_it.h"

MENU Menu;           //菜单结构指针变量
MENU_PARE menu_para; //菜单参数
SEG_LED seg_led;     //挂载在数码管上的LED
SEG_POS seg_pos;     //数码管带点位置

extern uint8_t xdata  function_id;

/*数码管显示缓存*/
uint8_t  xdata g_displayBuffer[9]={1};

/*用于检擦数据是否倍更改*/
uint8_t xdata check_dataBuffer[12];

/*按键长按及短按,按键释放*/
uint8_t xdata  key_long_click=0,key_short_click=0,key_release=0;
uint8_t xdata  click_time=0,click_lock=0;
uint8_t xdata  current_click_time=0,last_click_time=0;

/*共阴数码管断码*/
uint8_t code Seg[]=
{
    0x3F,  //"0"  
    0x06,  //"1"  
    0x5B,  //"2"
    0x4F,  //"3"
    0x66,  //"4"
    0x6D,  //"5"
    0x7D,  //"6"
    0x07,  //"7"
    0x7F,  //"8"
    0x6F,  //"9"  
    0x77,  //"A" 10
    0x7C,  //"B"
    0x39,  //"C"
    0x5E,  //"D"
    0x79,  //"E"
    0x71,  //"F" 15
    0x76,  //"H"
    0x38,  //"L"
    0x37,  //"n"
    0x3E,  //"u" 19
    0x73,  //"P" 20
    0x5C,  //"o" 21
    0x80,  //"." 22
    0x40,  //"-" 23
    0x80,  //LED 24
	0x70,  //r   25
	0x78,  //t   26
    0x00  //熄灭  27
};


/************************************************************************************
**@函数功能：数码管GPIO驱动初始化
**@函数参数: 无
**@返回值：无
**@作者：XiaoYoung
**@版本及日期：2020/11/2
**@更新说明：
***********************************************************************************/
void ledDisplay_init(void)
{

  /*数码管段选*/
  SegPortL_Mode |= bit1|bit3|bit5|bit7;//P00~P03  推挽输出
  SegPortH_Mode |= bit1|bit3|bit5|bit7;//P04~P07  推挽输出
  SegPort=0x00;

  /*数码管位选*/
  PositionPortL_Mode |=bit1|bit3|bit5|bit7;//P40~P43  推挽输出	
  PositionPortH_Mode |=bit1|bit3|bit5|bit7;//P44~P47  推挽输出	
  PositionPort=0x00;
	
	 ButtonPortH_Mode |=0x04; //P35 上拉输入
	 ButtonPortL_Mode |=0x00;
	
		Menu.SET_Value=0;
		Menu.SET_KEY_LOCK=0;
		Menu.DEC_KEY_LOCK=0;
		Menu.INC_KEY_LOCK=0;
		Menu.V_OR_A=0;
		Menu.SET_TIME=0;
		Menu.DEC_TIME=0;
		Menu.INC_TIME=0;	
		
		menu_para.noLoad_voltage=0;
		menu_para.noLoad_voltage_err=0;
		menu_para.load_voltage=0;
		menu_para.load_voltage_err=0;
		menu_para.load_current=0;
		menu_para.load_current_err=0;
		menu_para.load_time=0;
		menu_para.noLoadShort_time=0;
		menu_para.LoadShort_time=0;
		menu_para.battery_time=0;
		menu_para.limit_current=0;
		menu_para.limit_current_err=0;
		
		seg_pos.seg_position =0x00;
	
	    g_displayBuffer[0]=0;			
		set_displayBuffer(1,0,g_displayBuffer,27);/*关闭所有数码管显示*/
		set_displayBuffer(2,0,g_displayBuffer,27);	
		set_displayBuffer(3,0,g_displayBuffer,27);
		set_displayBuffer(4,0,g_displayBuffer,27);		

		set_displayBuffer(5,0,g_displayBuffer,27);
		set_displayBuffer(6,0,g_displayBuffer,27);	
		set_displayBuffer(7,0,g_displayBuffer,27);
		set_displayBuffer(8,0,g_displayBuffer,27);		
		
}


/************************************************************************************
**@函数功能：数码管显示函数  
**@函数参数：
**         showPosition  --->显示的位
 **        buffer        --->数据显示缓存     
**@返回值：无
**@作者：XiaoYoung
**@版本及日期：2020/11/17
**@更新说明：
       V1.0:
           数码管扫描方式：消隐，位选，送段
***********************************************************************************/
void LedDisplay_scan(uint8_t showPosition,uint8_t *buffer)
{
			switch(showPosition)
			{
					 	case 1:
									SegPort=0x00; //消影
									dig1_2
									if(seg_pos.SEG_BIT.pos1)
									{
											SegPort=(Seg[buffer[1]]|0x80);						 
									}
									else
									{
											SegPort=Seg[buffer[1]];					 
									}
					 	break;
						 case 2:
									SegPort=0x00;
									dig2_2

								Menu.DEC_TIME++;
								if(Menu.DEC_TIME>=4)   //2ms
								{			
										if((!Button_Pin) && (Menu.SET_KEY_LOCK==0) &&(Menu.DEC_KEY_LOCK==0)&&(Menu.INC_KEY_LOCK==0))
										{
														Menu.SET_KEY_LOCK=0;
														Menu.DEC_KEY_LOCK=1;									
														Menu.INC_KEY_LOCK=0;					
										}	
													Menu.DEC_TIME=0;										
					 	 }

									if((Button_Pin) &&((Menu.SET_KEY_LOCK==1) ||(Menu.DEC_KEY_LOCK==1)||(Menu.INC_KEY_LOCK==1)))
									{
											Menu.SET_KEY_LOCK=0;
											Menu.DEC_KEY_LOCK=0;									
											Menu.INC_KEY_LOCK=0;								
									}
									
									if(seg_pos.SEG_BIT.pos2)
									{
										SegPort=(Seg[buffer[2]]|0x80);						 
									}
									else
									{
										SegPort=Seg[buffer[2]];					 
									}
					 	break;
						 case 3:
									SegPort=0x00;
									dig3_2
							
											Menu.SET_TIME++;
											if(Menu.SET_TIME>=4)
											{			
																	if((!Button_Pin) && (Menu.SET_KEY_LOCK==0) &&(Menu.DEC_KEY_LOCK==0)&&(Menu.INC_KEY_LOCK==0))
																	{									
																							Menu.SET_KEY_LOCK=1;
																							Menu.DEC_KEY_LOCK=0;									
																							Menu.INC_KEY_LOCK=0;					
																		}
														    Menu.SET_TIME=0;
												}

									if(seg_pos.SEG_BIT.pos3)
									{
											SegPort=(Seg[buffer[3]]|0x80);						 
									}
									else
									{
											SegPort=Seg[buffer[3]];					 
									}
					 	break;
				 		case 4:
									SegPort=0x00;
									dig4_2	

									Menu.INC_TIME++;
									if(Menu.INC_TIME>=4)
									{										
												if((!Button_Pin) && (Menu.SET_KEY_LOCK==0) &&(Menu.DEC_KEY_LOCK==0)&&(Menu.INC_KEY_LOCK==0))
												{													
															Menu.SET_KEY_LOCK=0;
															Menu.DEC_KEY_LOCK=0;									
															Menu.INC_KEY_LOCK=1;					
													}							
							    	 Menu.INC_TIME=0;												
									}
								
									if((Button_Pin) &&((Menu.SET_KEY_LOCK==1) ||(Menu.DEC_KEY_LOCK==1)||(Menu.INC_KEY_LOCK==1)))
									{
											Menu.SET_KEY_LOCK=0;
											Menu.DEC_KEY_LOCK=0;									
											Menu.INC_KEY_LOCK=0;					
									}
									
									if(seg_led.red)
									{
								  		SegPort=Seg[buffer[4]]|0x80;						 
									}
									else
									{
											SegPort=Seg[buffer[4]];					 
									}
						break;				
							case 5:
										SegPort=0x00; //消影
										dig1_1
										if(seg_pos.SEG_BIT.pos5)
										{
												SegPort=Seg[buffer[5]]|0x80;						 
										}
										else
										{
												SegPort=Seg[buffer[5]];					 
										}
							break;
							case 6:
										SegPort=0x00;
										dig2_1
										if(seg_pos.SEG_BIT.pos6)
										{
											SegPort=Seg[buffer[6]]|0x80;						 
										}
										else
										{
											SegPort=Seg[buffer[6]];					 
										}
							break;
							case 7:
										SegPort=0x00;
										dig3_1
										if(seg_pos.SEG_BIT.pos7)
										{
												SegPort=Seg[buffer[7]]|0x80;						 
										}
										else
										{
												SegPort=Seg[buffer[7]];					 
										}
							break;
							case 8:
										SegPort=0x00;
										dig4_1	
										if(seg_led.green)
										{
											SegPort=Seg[buffer[8]]|0x80;						 
										}
										else
										{
												SegPort=Seg[buffer[8]];					 
										}				
							break;
										
						default:
						
						break;
				}
			
				
}

/************************************************************************************
**@函数功能：设置显示数值
**@函数参数：showPosition --.显示的位
**          point        --.1：带点
**                       --.0: 不带带点
**          buffer       --.显示缓存
**          value        --.向显示缓存写入的值  
**@返回值：无
**@作者：XiaoYoung
**@版本及日期：2020/11/17
**@更新说明：
***********************************************************************************/
void set_displayBuffer(uint8_t showPosition,uint8_t point,uint8_t *buffer,uint8_t value)
{
  switch(showPosition)
		{
		 	case 1:
					 if(point)
						{
				  		seg_pos.seg_position |=0x01;		
						}
						else
						{
				  	seg_pos.seg_position &=0xfe;										
						}

						buffer[1]=value;	
				break;
		 	case 2:
					 if(point)
						{
				  		seg_pos.seg_position |=0x02;		
						}
						else
						{
				  	seg_pos.seg_position &=0xfc;										
						}

						buffer[2]=value;	
				break;
		 	case 3:
					 if(point)
						{
				  		seg_pos.seg_position |=0x04;		
						}
						else
						{
				  	seg_pos.seg_position &=0xfb;										
						} 

						buffer[3]=value;	
				break;
		 	case 4:
					 if(point)
						{
				  		seg_pos.seg_position |=0x08;		
						}
						else
						{
				  	seg_pos.seg_position &=0xf7;									
						}

						buffer[4]=value;	
				break;
		 	case 5:
					 if(point)
						{
				  		seg_pos.seg_position |=0x10;		
						}
						else
						{
				  	seg_pos.seg_position &=0xef;									
						}

						buffer[5]=value;	
				break;
		 	case 6:
					 if(point)
						{
				  		seg_pos.seg_position |=0x20;		
						}
						else
						{
				  	seg_pos.seg_position &=0xcf;									
						}

						buffer[6]=value;	
				break;
		 	case 7:
					 if(point)
						{
				  		seg_pos.seg_position |=0x40;		
						}
						else
						{
				  	seg_pos.seg_position &=0xbf;										
						}

						buffer[7]=value;	
				break;
		 	case 8:
					 if(point)
						{
				  		seg_pos.seg_position |=0x80;		
						}
						else
						{
				  	seg_pos.seg_position &=0x7f;										
						}

						buffer[8]=value;	
				break;
				default:
					
				break;
		}
}


/************************************************************************************
**@函数功能：点亮LED
**@函数参数： color--.LED的颜色(red,green)     
**           pin_level--.LED的电平（low,high）
**@返回值：无
**@作者：XiaoYoung
**@版本及日期：2020/11/18
**@更新说明：
***********************************************************************************/
void  seg_led_write(COLOR color,PIN_LEVEL pin_level)
{
  switch(color)
	{
		case red:
			  if(pin_level==high)
			 	{
				  seg_led.red=1;
				 }
			 	else
			 	{
				  seg_led.red=0;
			 	}
		break;
		case green:
			  if(pin_level==high)
				{
						seg_led.green=1;
				}
				else
				{
						seg_led.green=0;
				}
		break;			
		default:
			
		break;
	}  
}

/************************************************************************************
**@函数功能：菜单改变
**@函数参数：无
**@返回值：无
**@作者：XiaoYoung
**@版本及日期：2020/11/14
**@更新说明：
***********************************************************************************/
void Menu_change(void)
{
	    /*SET键按下*/
				if((Menu.SET_KEY_LOCK==1) &&(Menu.DEC_KEY_LOCK==0)&&(Menu.INC_KEY_LOCK==0))
				{
									if((get_time.set_key_time_flag==0) && (get_time.set_key_time==0))
									{
													get_time.set_key_time_flag=1; 
													get_time.inc_key_time_flag=0; 
													get_time.dec_key_time_flag=0; 		
							      get_time.set_key_time=0; 					
													get_time.inc_key_time=0; 
													get_time.dec_key_time=0; 												
									}						
				}
					/*INC键按下*/
			 if((Menu.SET_KEY_LOCK==0) &&(Menu.DEC_KEY_LOCK==0)&&(Menu.INC_KEY_LOCK==1))
				{  
						if((get_time.inc_key_time_flag==0) && (get_time.inc_key_time==0))
						{
										get_time.set_key_time_flag=0; 
										get_time.inc_key_time_flag=1; 
										get_time.dec_key_time_flag=0; 		
										get_time.set_key_time=0; 					
										get_time.inc_key_time=0; 
										get_time.dec_key_time=0;			
					
						}							
				}
				

/*************长按短按实现逻辑********************/
//				if(current_click_time -)
				
				/*DEC键按下*/
			 if((Menu.SET_KEY_LOCK==0) &&(Menu.DEC_KEY_LOCK==1)&&(Menu.INC_KEY_LOCK==0))
				{	
							if((get_time.dec_key_time_flag==0) && (get_time.dec_key_time==0))
							{
											get_time.set_key_time_flag=0; 
											get_time.inc_key_time_flag=0; 
											get_time.dec_key_time_flag=1; 		
											get_time.set_key_time=0; 					
											get_time.inc_key_time=0; 
											get_time.dec_key_time=0; 						
							}							
				}
	    /*SET 键按下*/
			if((get_time.set_key_time>100) && (get_time.set_key_time<500))
			{
							get_time.set_key_time=0; 
							get_time.set_key_time_flag=0; 
							Menu.SET_Value++;
							if(Menu.SET_Value>12)			
							{
										Menu.SET_Value=0;
							}						
			}
			

#ifdef ENABLE_MENU_SHOW
  switch(Menu.SET_Value)
	 {
				case 0:  /*数值显示*/
					if(function_id==0)
					{
						
						 #ifdef DISENABLE_DEBUG 
							set_displayBuffer(1,0,g_displayBuffer,15);
							set_displayBuffer(2,0,g_displayBuffer,23);	
							set_displayBuffer(3,0,g_displayBuffer,23);
							set_displayBuffer(4,0,g_displayBuffer,15);	


							set_displayBuffer(5,0,g_displayBuffer,15);
							set_displayBuffer(6,0,g_displayBuffer,23);	
							set_displayBuffer(7,0,g_displayBuffer,23);
							set_displayBuffer(8,0,g_displayBuffer,15);				
						 #endif      						
					
					}
			break;
			case 1: /*空载电压设置 */
				
						/*数码管1 显示 NL01*/
			    #ifdef DISENABLE_DEBUG 
									set_displayBuffer(1,0,g_displayBuffer,18);//N
									set_displayBuffer(2,0,g_displayBuffer,17);//L			
			    #endif
									set_displayBuffer(3,0,g_displayBuffer,0);//0				
									set_displayBuffer(4,0,g_displayBuffer,1);//1	
			
						if((get_time.inc_key_time>200) && (get_time.inc_key_time<500))
						{		
										get_time.inc_key_time=0; 
										get_time.inc_key_time_flag=0; 
										menu_para.noLoad_voltage++;
										if(menu_para.noLoad_voltage>=255)			
										{
													menu_para.noLoad_voltage=0;
										}						
						}
		
					if((get_time.dec_key_time>200) && (get_time.dec_key_time<500))
					{
									get_time.dec_key_time=0; 
									get_time.dec_key_time_flag=0; 
									menu_para.noLoad_voltage--;
									if(menu_para.noLoad_voltage<=0)			
									{
												menu_para.noLoad_voltage=255;
									}						
					}
					
					/*数码管2 显示xx.xU*/				
					set_displayBuffer(5,0,g_displayBuffer,menu_para.noLoad_voltage/100);
					set_displayBuffer(6,1,g_displayBuffer,menu_para.noLoad_voltage%100/10);			
					set_displayBuffer(7,0,g_displayBuffer,menu_para.noLoad_voltage%10);			
					set_displayBuffer(8,0,g_displayBuffer,19);		
						
    break;
  		case 2:/*空载电压偏差设置*/
			
			    /*数码管1 显示Er02*/
							#ifdef DISENABLE_DEBUG 
						  set_displayBuffer(1,0,g_displayBuffer,14);//E
			     set_displayBuffer(2,0,g_displayBuffer,25);//r			
				   #endif
			     set_displayBuffer(3,0,g_displayBuffer,0);//0			
			     set_displayBuffer(4,0,g_displayBuffer,2);//2

			    /*数码管2 显示xx.xU*/
								if((get_time.inc_key_time>200) && (get_time.inc_key_time<500))
								{
												get_time.inc_key_time=0; 
												get_time.inc_key_time_flag=0; 
												menu_para.noLoad_voltage_err++;
												if(menu_para.noLoad_voltage_err>=255)			
												{
															menu_para.noLoad_voltage_err=0;
												}						
								}
				
								if((get_time.dec_key_time>200) && (get_time.dec_key_time<500))
								{
												get_time.dec_key_time=0; 
												get_time.dec_key_time_flag=0; 
												menu_para.noLoad_voltage_err--;
												if(menu_para.noLoad_voltage_err<=0)			
												{
															menu_para.noLoad_voltage_err=255;
												}						
								}
					
					   set_displayBuffer(5,0,g_displayBuffer,menu_para.noLoad_voltage_err/100);
			     set_displayBuffer(6,1,g_displayBuffer,menu_para.noLoad_voltage_err%100/10);			
			     set_displayBuffer(7,0,g_displayBuffer,menu_para.noLoad_voltage_err%10);			
			     set_displayBuffer(8,0,g_displayBuffer,19);									
    break;
    case 3:/*带载电压设置*/
			  /*数码管1 显示LOO3*/
				  #ifdef DISENABLE_DEBUG 
						  set_displayBuffer(1,0,g_displayBuffer,17);//L
			     set_displayBuffer(2,0,g_displayBuffer,21);//O			
				  #endif
			     set_displayBuffer(3,0,g_displayBuffer,0);//0					
			     set_displayBuffer(4,0,g_displayBuffer,3);//3	
				
			  /*数码管2 显示xx.xU*/
								if((get_time.inc_key_time>200) && (get_time.inc_key_time<500))
								{
												get_time.inc_key_time=0; 
												get_time.inc_key_time_flag=0; 
												menu_para.load_voltage++;
												if(menu_para.load_voltage>=255)			
												{
															menu_para.load_voltage=0;
												}						
								}
				
								if((get_time.dec_key_time>200) && (get_time.dec_key_time<500))
								{
												get_time.dec_key_time=0; 
												get_time.dec_key_time_flag=0; 
												menu_para.load_voltage--;
												if(menu_para.load_voltage<=0)			
												{
															menu_para.noLoad_voltage_err=255;
												}						
								}			
					   set_displayBuffer(5,0,g_displayBuffer,menu_para.load_voltage/100);
			     set_displayBuffer(6,1,g_displayBuffer,menu_para.load_voltage%100/10);			
			     set_displayBuffer(7,0,g_displayBuffer,menu_para.load_voltage%10);			
			     set_displayBuffer(8,0,g_displayBuffer,19);					
							
		break;
		case 4: /*带载电压偏差设置*/

			  /*数码管1 显示Er04*/
						  set_displayBuffer(1,0,g_displayBuffer,14);//E
			     set_displayBuffer(2,0,g_displayBuffer,25);//r			
			     set_displayBuffer(3,0,g_displayBuffer,0);//0				
			     set_displayBuffer(4,0,g_displayBuffer,4);//4	
		
			  /*数码管2 显示xx.xU*/
								if((get_time.inc_key_time>200) && (get_time.inc_key_time<500))
								{
												get_time.inc_key_time=0; 
												get_time.inc_key_time_flag=0; 
												menu_para.load_voltage_err++;
												if(menu_para.load_voltage_err>=255)			
												{
															menu_para.load_voltage_err=0;
												}						
								}
				
								if((get_time.dec_key_time>200) && (get_time.dec_key_time<500))
								{
												get_time.dec_key_time=0; 
												get_time.dec_key_time_flag=0; 
												menu_para.load_voltage_err--;
												if(menu_para.load_voltage_err<=0)			
												{
															menu_para.load_voltage_err=255;
												}						
								}		
					   set_displayBuffer(5,0,g_displayBuffer,menu_para.load_voltage_err/100);
			     set_displayBuffer(6,1,g_displayBuffer,menu_para.load_voltage_err%100/10);			
			     set_displayBuffer(7,0,g_displayBuffer,menu_para.load_voltage_err%10);			
			     set_displayBuffer(8,0,g_displayBuffer,19);					
							
  break;
		case 5: /*带载电流设置*/

			  /*数码管1 显示lc05*/
						  set_displayBuffer(1,0,g_displayBuffer,17);//L
			     set_displayBuffer(2,0,g_displayBuffer,12);//c			
			     set_displayBuffer(3,0,g_displayBuffer,0);//0				
			     set_displayBuffer(4,0,g_displayBuffer,5);//5	
		
			  /*数码管2 显示xx.xA*/
								if((get_time.inc_key_time>200) && (get_time.inc_key_time<500))
								{
												get_time.inc_key_time=0; 
												get_time.inc_key_time_flag=0; 
												menu_para.load_current++;
												if(menu_para.load_current>=255)			
												{
															menu_para.load_current=0;
												}						
								}
				
								if((get_time.dec_key_time>200) && (get_time.dec_key_time<500))
								{
												get_time.dec_key_time=0; 
												get_time.dec_key_time_flag=0; 
												menu_para.load_current--;
												if(menu_para.load_current<=0)			
												{
															menu_para.load_current=255;
												}						
								}		

					   set_displayBuffer(5,0,g_displayBuffer,menu_para.load_current/100);
			     set_displayBuffer(6,1,g_displayBuffer,menu_para.load_current%100/10);			
			     set_displayBuffer(7,0,g_displayBuffer,menu_para.load_current%10);			
			     set_displayBuffer(8,0,g_displayBuffer,10);	
							
		break;
		case 6: /*带载电流偏差设置*/
			
			  /*数码管1 显示Er06*/
						  set_displayBuffer(1,0,g_displayBuffer,14);//E
			     set_displayBuffer(2,0,g_displayBuffer,25);//r			
			     set_displayBuffer(3,0,g_displayBuffer,0);//0				
			     set_displayBuffer(4,0,g_displayBuffer,6);//6	
		
			  /*数码管2 显示xx.xA*/
								if((get_time.inc_key_time>200) && (get_time.inc_key_time<500))
								{
												get_time.inc_key_time=0; 
												get_time.inc_key_time_flag=0; 
												menu_para.load_current_err++;
												if(menu_para.load_current_err>=255)			
												{
															menu_para.load_current_err=0;
												}						
								}
				
								if((get_time.dec_key_time>200) && (get_time.dec_key_time<500))
								{
												get_time.dec_key_time=0; 
												get_time.dec_key_time_flag=0; 
												menu_para.load_current_err--;
												if(menu_para.load_current_err<=0)			
												{
															menu_para.load_current_err=255;
												}						
								}		
					   set_displayBuffer(5,0,g_displayBuffer,menu_para.load_current_err/100);
			     set_displayBuffer(6,1,g_displayBuffer,menu_para.load_current_err%100/10);			
			     set_displayBuffer(7,0,g_displayBuffer,menu_para.load_current_err%10);			
			     set_displayBuffer(8,0,g_displayBuffer,10);	
							
		break;
		case 7:/*带载时间设置*/
			
			    /*数码管1 显示Lt07*/
						  set_displayBuffer(1,0,g_displayBuffer,17);//L
			     set_displayBuffer(2,0,g_displayBuffer,26);//t			
			     set_displayBuffer(3,0,g_displayBuffer,0);//0			
			     set_displayBuffer(4,0,g_displayBuffer,7);//7
		
			    /*数码管2 显示xXx*/
								if((get_time.inc_key_time>200) && (get_time.inc_key_time<500))
								{
												get_time.inc_key_time=0; 
												get_time.inc_key_time_flag=0; 
												menu_para.load_time++;
												if(menu_para.load_time>=255)			
												{
															menu_para.load_time=0;
												}						
								}
				
								if((get_time.dec_key_time>200) && (get_time.dec_key_time<500))
								{
												get_time.dec_key_time=0; 
												get_time.dec_key_time_flag=0; 
												menu_para.load_time--;
												if(menu_para.load_time<=0)			
												{
															menu_para.load_time=255;
												}						
								}	
					   set_displayBuffer(6,0,g_displayBuffer,menu_para.load_time/100);
			     set_displayBuffer(7,0,g_displayBuffer,menu_para.load_time%100/10);			
			     set_displayBuffer(8,0,g_displayBuffer,menu_para.load_time%10);			
			     set_displayBuffer(5,0,g_displayBuffer,27);	
							
		break;
		case 8:/*空载短路时间设置*/

			     /*数码管1 显示Ns08*/
						  set_displayBuffer(1,0,g_displayBuffer,18);//n
			     set_displayBuffer(2,0,g_displayBuffer,5);//s			
			     set_displayBuffer(3,0,g_displayBuffer,0);//0			
			     set_displayBuffer(4,0,g_displayBuffer,8);//8
		
			     /*数码管2 显示xxX*/
								if((get_time.inc_key_time>200) && (get_time.inc_key_time<500))
								{
												get_time.inc_key_time=0; 
												get_time.inc_key_time_flag=0; 
												menu_para.noLoadShort_time++;
												if(menu_para.noLoadShort_time>=255)			
												{
															menu_para.noLoadShort_time=0;
												}						
								}
				
								if((get_time.dec_key_time>200) && (get_time.dec_key_time<500))
								{
												get_time.dec_key_time=0; 
												get_time.dec_key_time_flag=0; 
												menu_para.noLoadShort_time--;
												if(menu_para.noLoadShort_time<=0)			
												{
															menu_para.noLoadShort_time=255;
												}						
								}	
					   set_displayBuffer(6,0,g_displayBuffer,menu_para.noLoadShort_time/100);
			     set_displayBuffer(7,0,g_displayBuffer,menu_para.noLoadShort_time%100/10);			
			     set_displayBuffer(8,0,g_displayBuffer,menu_para.noLoadShort_time%10);			
			     set_displayBuffer(5,0,g_displayBuffer,27);	
							
		break;
		case 9:/*带载短路时间设置*/
 
			     /*数码管1 显示Ls09*/		
						  set_displayBuffer(1,0,g_displayBuffer,17);//L
			     set_displayBuffer(2,0,g_displayBuffer,5);//S			
			     set_displayBuffer(3,0,g_displayBuffer,0);//0			
			     set_displayBuffer(4,0,g_displayBuffer,9);//9	
		
			    /*数码管2 显示xxX*/
								if((get_time.inc_key_time>200) && (get_time.inc_key_time<500))
								{
												get_time.inc_key_time=0; 
												get_time.inc_key_time_flag=0; 
												menu_para.LoadShort_time++;
												if(menu_para.LoadShort_time>=255)			
												{
															menu_para.LoadShort_time=0;
												}						
								}
				
								if((get_time.dec_key_time>200) && (get_time.dec_key_time<500))
								{
												get_time.dec_key_time=0; 
												get_time.dec_key_time_flag=0; 
												menu_para.LoadShort_time--;
												if(menu_para.LoadShort_time<=0)			
												{
															menu_para.LoadShort_time=255;
												}						
								}					

					   set_displayBuffer(6,0,g_displayBuffer,menu_para.LoadShort_time/100);
			     set_displayBuffer(7,0,g_displayBuffer,menu_para.LoadShort_time%100/10);			
			     set_displayBuffer(8,0,g_displayBuffer,menu_para.LoadShort_time%10);			
			     set_displayBuffer(5,0,g_displayBuffer,27);	
							
		break;
		case 10:/*电瓶反接时间*/

			     /*数码管1 显示bt10*/
						  set_displayBuffer(1,0,g_displayBuffer,11);//B
			     set_displayBuffer(2,0,g_displayBuffer,26);//t			
			     set_displayBuffer(3,0,g_displayBuffer,1);//1				
			     set_displayBuffer(4,0,g_displayBuffer,0);//0	
		
			    /*数码管2 显示xxX*/
								if((get_time.inc_key_time>200) && (get_time.inc_key_time<500))
								{
												get_time.inc_key_time=0; 
												get_time.inc_key_time_flag=0; 
												menu_para.battery_time++;
												if(menu_para.battery_time>=255)			
												{
															menu_para.battery_time=0;
												}						
								}
				
								if((get_time.dec_key_time>100) && (get_time.dec_key_time<500))
								{
												get_time.dec_key_time=0; 
												get_time.dec_key_time_flag=0; 
												menu_para.battery_time--;
												if(menu_para.battery_time<=0)			
												{
															menu_para.battery_time=255;
												}						
								}		

					   set_displayBuffer(6,0,g_displayBuffer,menu_para.battery_time/100);
			     set_displayBuffer(7,0,g_displayBuffer,menu_para.battery_time%100/10);			
			     set_displayBuffer(8,0,g_displayBuffer,menu_para.battery_time%10);			
			     set_displayBuffer(5,0,g_displayBuffer,27);	
							
		break;
		case 11:/*限流值设置*/

			    /*数码管1 显示Lc11*/
						  set_displayBuffer(1,0,g_displayBuffer,17);//L
			     set_displayBuffer(2,0,g_displayBuffer,12);//c			
			     set_displayBuffer(3,0,g_displayBuffer,1);//1			
			     set_displayBuffer(4,0,g_displayBuffer,1);//1
		
			    /*数码管2 显示xx.A*/
								if((get_time.inc_key_time>100) && (get_time.inc_key_time<500))
								{
												get_time.inc_key_time=0; 
												get_time.inc_key_time_flag=0; 
												menu_para.limit_current++;
												if(menu_para.limit_current>=255)			
												{
															menu_para.limit_current=0;
												}						
								}
				
								if((get_time.dec_key_time>100) && (get_time.dec_key_time<500))
								{
												get_time.dec_key_time=0; 
												get_time.dec_key_time_flag=0; 
												menu_para.limit_current--;
												if(menu_para.limit_current<=0)			
												{
															menu_para.limit_current=255;
												}						
								}				

					   set_displayBuffer(5,0,g_displayBuffer,menu_para.limit_current/100);
			     set_displayBuffer(6,1,g_displayBuffer,menu_para.limit_current%100/10);			
			     set_displayBuffer(7,0,g_displayBuffer,menu_para.limit_current%10);			
			     set_displayBuffer(8,0,g_displayBuffer,10);	
							
		break;
		case 12:/*限流值偏差设置*/

			  /*数码管1 显示Er12*/
						  set_displayBuffer(1,0,g_displayBuffer,14);//E
			     set_displayBuffer(2,0,g_displayBuffer,25);//r			
			     set_displayBuffer(3,0,g_displayBuffer,1);//1				
			     set_displayBuffer(4,0,g_displayBuffer,2);//2	
		
			  /*数码管2 显示xx.xA*/
								if((get_time.inc_key_time>100) && (get_time.inc_key_time<500))
								{
												get_time.inc_key_time=0; 
												get_time.inc_key_time_flag=0; 
												menu_para.limit_current_err++;
												if(menu_para.limit_current_err>=255)			
												{
															menu_para.limit_current_err=0;
												}						
								}
				
								if((get_time.dec_key_time>100) && (get_time.dec_key_time<500))
								{
												get_time.dec_key_time=0; 
												get_time.dec_key_time_flag=0; 
												menu_para.limit_current_err--;
												if(menu_para.limit_current_err<=0)			
												{
															menu_para.limit_current_err=255;
												}						
								}				

					   set_displayBuffer(5,0,g_displayBuffer,menu_para.limit_current_err/100);
			     set_displayBuffer(6,1,g_displayBuffer,menu_para.limit_current_err%100/10);			
			     set_displayBuffer(7,0,g_displayBuffer,menu_para.limit_current_err%10);			
			     set_displayBuffer(8,0,g_displayBuffer,10);	
							
		break;
	}
#endif

}

/************************************************************************************
**@函数功能：获取参数CRC 值
**@函数参数：无
**@返回值：参数CRC 值
**@作者：XiaoYoung
**@版本及日期：2020/11/17
**@更新说明：
***********************************************************************************/
uint16_t get_parameterChange(void)
{
   uint16_t crc_code;
	
		 check_dataBuffer[0]= menu_para.noLoad_voltage;    
		 check_dataBuffer[1]=	menu_para.noLoad_voltage_err;
			check_dataBuffer[2]= menu_para.load_voltage;      
			check_dataBuffer[3]=	menu_para.load_voltage_err;  
			check_dataBuffer[4]=	menu_para.load_current;      
			check_dataBuffer[5]=	menu_para.load_current_err; 
			check_dataBuffer[6]=	menu_para.load_time ;        
			check_dataBuffer[7]=	menu_para.noLoadShort_time ; 
			check_dataBuffer[8]=	menu_para.LoadShort_time ;   
			check_dataBuffer[9]=	menu_para.battery_time;      
			check_dataBuffer[10]=	menu_para.limit_current;   
			check_dataBuffer[11]=	menu_para.limit_current_err;
	
  	crc_code=Get_CRC_Code(check_dataBuffer,12);

	  return crc_code;
}

/************************************************************************************
**@函数功能：检擦参数是改变 通过按下SET键与回到主界面
**@函数参数：无
**@返回值：无
**@作者：XiaoYoung
**@版本及日期：2020/11/17
**@更新说明：
***********************************************************************************/
void check_parameterChange(void)
{
	  static xdata uint8_t value=0;
	  static xdata uint16_t get_crcCode=0;
	  uint16_t xdata new_crcCode=0;
	
				if((Menu.SET_Value==1) && (value==0))    //进入菜单界面后，还未设置参数  首先获得未改变参数时的crc 值
				{
							get_crcCode =get_parameterChange();
							value=1;
					
//				    H1=(get_crcCode&0xff00)>>8;
//		     	L1=get_crcCode;		
//							 g_test1++;
				}
						
		if((Menu.SET_Value==0)&&(value==1))  //回到主界面后检查参数是否改变
		{
		    new_crcCode = get_parameterChange();
			
						if(get_crcCode!=new_crcCode)  //说明参数已经改变
						{
								write_user_parameter();
							 delay(2000); 		
								value=0;
								get_crcCode=0;
								new_crcCode=0;
							
//							 g_test2++;
//								H2=(new_crcCode&0xff00)>>8;
//							 L2=new_crcCode;
						}
						else
						{
								value=0;
								get_crcCode=0;
								new_crcCode=0;
							
//							 g_test3++;
						}						
		}
			
}

/************************************************************************************
**@函数功能：清空显示缓存
**@函数参数：无
**@返回值：无
**@作者：XiaoYoung
**@版本及日期：2020/11/20
**@更新说明：
***********************************************************************************/
void clear_displayBuffer(uint8_t *buffer)
{
  uint8_t i;
	 for(i=0;i<9;i++)
 	{
	    buffer[i]=27;
	 }
}
